package com.ftg.learn.chapter08.tree;

import lombok.Data;

/**
 * 树
 *
 * @author lijiaxin
 * @version 1.0
 * @date 2023/8/10 16:17
 */

public class MyTree {


    //根节点
    private Node root;

    /**
     *
     * @param val
     * @param type  left right null
     */
    public boolean add1(int val,String type){
        Node temp  =new Node(val);
        temp.setVal(val);

        if(this.root == null){
            this.root = temp;
            return true;
        }

        switch (type){
            case "left":
                this.root.setLeft(temp);
                return true;
            default:
                this.root.setRight(temp);
        }
        return true;
    }

    public Node add(int x){
        if(this.root==null){
            Node t=new Node(x);
            this.root=t;
            return t;
        }
        return this.add(root,x);
    }

    /**
     *  思路写一下:
     *   左子树 《 根  《  右子树
     *   root：根
     */
    public Node add(Node root,int x){
        if(root.getVal()>x){
            //应该向左侧
            if(root.getLeft()==null){
                Node temp=new Node(x);
                root.setLeft(temp);
                return temp;
            }
            add(root.getLeft(),x);
        }else {
            //向右
            if(root.getRight()==null){
                Node temp=new Node(x);
                root.setRight(temp);
                return temp;
            }
            add(root.getRight(),x);
        }
        return null;
    }

    /**
     * 树第一个节点
     */
    @Data
    public class Node{

        public Node(int x){
            this.val=x;
        }
        //左子树
        Node left;

        //数据
        int val;

        //右子树
        Node right;
    }

    public static void main(String[] args) {
        MyTree m = new MyTree();
        m.add1(23,null);
        m.add1(45,"left");
        m.add1(78,"right");

        m.add(2);

        System.out.println(m);

    }
}
